home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / ein / sources / loadsrc.lzh / LOAD / MAIN.C < prev    next >
C/C++ Source or Header  |  1994-09-05  |  18KB  |  627 lines

  1. /*<Header>==============================================================
  2. *
  3. *    òëë╫ò\Ī / "MAIN.C"
  4. *
  5. *        [ EIN(tm) project : âTâôâvâïâvâìâOâëâÇ ]
  6. *
  7. *    COPYRIGHT  Nam  1994, All rights reserved.
  8. *
  9. *    özòtüEægì₧üEëⁿò╧üEÅñùÿùpé╖é╫é─Ä⌐ùRüBé╜é╛é╡û│ò█Å╪é┴é╖
  10. *
  11. *-----------------------------------------------------------------------
  12. *    V1.0L01â┐    94.07.19/Nam    âvâìâgâ^âCâv
  13. *    V1.0L30        94.07.21/Nam    EIN(TM)î÷èJö┼
  14. *    V1.0L31        94.09.05/Nam    GM_QUITÄ₧é╔Ä⌐ò¬é┼WINDOWé≡Å┴ïÄ
  15. *</Header>==============================================================*/
  16. #include    <stdio.h>
  17. #include    <stdlib.h>
  18. #include    <string.h>
  19. #include    <snd.h>
  20. #include    <winb.h>
  21. #include    <te.h>
  22. #include    <fntb.h>
  23. #include    <gui.h>
  24. #include    <egb.h>
  25. //#include    <file_dlg.h>
  26. //#include    <tifflib.h>
  27. #include    <msdos.cf>
  28. #include    <loader.h>
  29. #include    <math.h>
  30. #include    <io.h>
  31. #include    <guidbg.h>
  32. //#include    <wgb.h>
  33. // üª é▒é▒é▄é┼é¬ò╜ï╧ôIé╔Ägùpé│éΩéΘâwâbâ_
  34.  
  35. #include    <mos.h>            // é▒é╠âTâôâvâïé┼é╠é▌òKùv(MOS_getTimeé╠ê╫)
  36.  
  37. #include    "..\ein\eintm.h"    // EIN(TM)è╓ÿAâëâCâuâëâèé╠âwâbâ_
  38.  
  39.  
  40. extern unsigned char ICON02[];        // âAâCâRâôâpâ^ü[âô
  41.  
  42. #define    ERROR    (-1)
  43. #define    PSET    (0)
  44.  
  45. #define    DISPMODE_ICON    (0)
  46. #define    DISPMODE_PANEL    (1)
  47.  
  48. #define    pattBuf        (&ICON02[4])    // âpâ^ü[âôÅæè╖éªùpâÅü[âNâGâèâA
  49. #define    ID_ICONBASE    (0)                // âAâCâRâôòöòié╠âxü[âXid
  50. #define    ID_ICONPAT    (1)                // âAâCâRâôòöòié╠id
  51. #define    ID_NUMGET    (5)                // ÉöÆlôⁿù═BOXé╠id
  52.  
  53. int        ID_ICON[2];                    // âAâCâRâôòöòié╠ID
  54. int        ID_PANEL[6];                // âpâlâïòöòié╠ID
  55. int        dispMode = 0;                // 0:icon / 1:win
  56.  
  57. /*= âèâWâàü[âÇùpÉ▌ÆΦ=================================================*/
  58. unsigned int    RSM_INT = 50*3;
  59. FRAME    RSM_ICONFR;
  60. char    RSMID[]="%%% LOAD icon %%%";
  61. char    RSMTITLE[]="òëë╫ò\Ī  V0.1 L31";
  62. /*===================================================================*/
  63.  
  64. //char    pattBuf[2*32];                // âpâ^ü[âôÅæè╖éªùpâÅü[âNâGâèâA
  65. int        updateFlag = NOERR;            // ëµû╩ìXÉVÆåé⌐ö█é⌐é≡Īé╖âtâëâO
  66.  
  67. unsigned int    loadInt = 50*3;                // òëë╫îvæ¬è╘èu(20msÆPê╩)
  68. unsigned int    loadMin = 3;                // ì┼żòëë╫è╘èu(20msÆPê╩)
  69. unsigned int    loadBfr = 0;                // æOë±îvæ¬Ä₧è╘(20msÆPê╩)
  70.  
  71. char    *GV_egbWork ;
  72. int        GV_apliLot ;
  73. void    ( *GV_defIdleTask )() ;
  74.  
  75.  
  76. char    *guiEgbPtr ;                //    EGB é╠âÅü[âNâAâhâîâX
  77. MMICTRL    mmic = {
  78.                  SCREEN16 | SCREENIGNORE,        //    resolution
  79.                  SCREENUNUSED,
  80.                  0, SCREENAVAILABLE, 0,    //    write_page,display_page,priority
  81.                  SCREENAVAILABLE,    //    mode
  82.                  SCREENEXPAND,        //    vram_x
  83.                  0,0,0,0,            //    size,*ptr,asize,*atpr
  84.                  0,0,0,0,            //    frame
  85.                  -32767,            //    move
  86.                  -32767,
  87.                   32767,
  88.                   32767,
  89.                  15,8,7,15            //    color
  90.                 } ;
  91.  
  92. /*===================================================================*/
  93. /*  âüâCâôâïü[âv                                                     */
  94. /*===================================================================*/
  95. void main()
  96. {
  97.     extern int APL_init() ;
  98.  
  99.     int        kobj;
  100.  
  101.     // Åëè·ë╗Åêù¥
  102.     if (MMI_Open( &mmic ) == NOERR){
  103.         // ô±ÅdïNô«é╠check
  104.         if ( (kobj = MMI_CallMessage( MMI_GetApliId(), GM_QUERYID, QM_KIND, 1)) > NOERR ){
  105.             MMI_CallMessage( MMI_GetApliId(), GM_SWITCH, FALSE, kobj );
  106.         } else {
  107.             // âAâCâhâïâ^âXâNé╔ôoÿ^
  108.             setIdleTask();
  109.             // Åëè·ë╗é╔ɼî≈é╖éΩé╬âüâCâôâïü[âvé╔
  110.             if ( APL_init()==NOERR ){
  111.                 // û│òëë╫Ä₧é╠âCâôâ^ü[âoâïé≡îvæ¬
  112.                 initInterval();
  113.                 // âüâCâôâïü[âv
  114.                 MMI_ExecSystem();
  115.             }
  116.             // âAâCâhâïé╠ë≡Å£
  117.             resetIdleTask();
  118.             // âEâBâôâhâDÅ┴ïÄ(üªSHELLé╔Å┴ïÄé│é╣éΘé╞Æxéóé╠é┼)
  119.             eraseWin();
  120.         }
  121.     }
  122.     // ÅIù╣Åêù¥
  123.     MMI_Close() ;
  124. }
  125.  
  126. /*===================================================================*/
  127. /*  Åëè·ë╗Åêù¥                                                       */
  128. /*===================================================================*/
  129. int APL_init()
  130. {
  131.     extern    MMIINIT    initDataRES_ICON ;
  132.     extern    MMIINIT    initDataRES_PANL ;
  133.  
  134.     extern    int ICONmaxId;
  135.     extern    unsigned char *ICONTbl[];
  136.  
  137.     extern int    userFunc();
  138.     extern int    initMemRes();
  139.  
  140.     HYPER    hyp;
  141.     register int    ret ;
  142.  
  143.     // EGBâÅü[âNâAâhâîâXĵô╛/âìü[âJâïâÅü[âNé╔âRâsü[/ë╝æzëµû╩Åεò±ìXÉV
  144.     if ( (ret = initMemRes()) != NOERR ){
  145.         return ret;
  146.     }
  147.  
  148.     // GUIòöòié╠Åëè·ë╗
  149.     if ((ret = MMI_initHyper()) < 0)            //    ânâCâpü[î^
  150.         return ret;
  151.     if ((ret = MMI_initDialogL40()) < 0)        //    â_âCâAâìâOî^
  152.         return ret;
  153.     if ((ret = MMI_initWindowL40()) < 0)        //    âEâBâôâhâEî^
  154.         return ret;
  155.     if ((ret = MMI_initMessageL40()) < 0)        //    âüâbâZü[âWî^
  156.         return ret;
  157.     if ((ret = MMI_initButtonL40()) < 0)        //    â{â^âôî^
  158.         return ret;
  159.     if ((ret = MMI_initDrawButtonL40()) < 0)    //    âhâìâEâ{â^âôî^
  160.         return ret;
  161.     if ((ret = MMI_initIconL40()) < 0)            //    âAâCâRâôî^
  162.         return ret;
  163.     if ((ret = MMI_initNumBoxL40()) < 0)        //    ÉöÆlôⁿù═boxî^
  164.         return ret;
  165.  
  166.     // âèâ\ü[âXé≡ôoÿ^
  167.     if ((ret = MMI_Init(&initDataRES_ICON)) < 0)
  168.         return ret ;
  169.     if ((ret = MMI_Init(&initDataRES_PANL)) < 0)
  170.         return ret ;
  171.  
  172.     // âåü[âUâAâCâRâôé≡ôoÿ^
  173.     MMI_SetIconTable( ICONTbl, ICONmaxId ) ;
  174.  
  175.     // GUIÉFé≡âüâjâàü[ÉFé╔É▌ÆΦ
  176.     EIN_initGuiColor();
  177.  
  178.     // âEâBâôâhâEù▐é≡âxü[âXòöòié╔ATTACH
  179.     MMI_SendMessage( ID_ICON[0], MM_ATTACH, 1, MMI_GetBaseObj() ) ;
  180.  
  181.     // âXâCâbâ`ââü[æ╬ë₧è╓Éöé╠ôoÿ^
  182.     MMI_SendMessage( MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc ) ;
  183.  
  184.     // â^âXâNâèâXâgé╔â^âCâgâïé≡ôoÿ^
  185.     MMI_CallMessage( MMI_GetApliId(), GM_TITLE, (int)RSMTITLE, 0 ) ;
  186.  
  187.     /*----------------------------------------------------------------*/
  188.     /*  âèâWâàü[âÇô╟é▌ì₧é▌ (üªé╠é┬éóé╜Åêù¥é═òKé╕ìsé┴é─é¡é╛é│éó)       */
  189.     /*----------------------------------------------------------------*/
  190.     char    work[RSMWORKSIZE];    // âèâWâàü[âÇâ}âlü[âWââé╠âÅü[âNâGâèâA
  191.     char    buf[1024];
  192.     char    *ptr;
  193.     int        size, x, y, z;
  194.  
  195.     // üªâèâWâàü[âÇâ}âlü[âWââé╠Åëè·ë╗(âAâvâèé╠IDâ^âOôoÿ^)
  196.     EIN_rsmInit( work, RSMID );
  197.     // üªô╟é▌ì₧é▌âoâbâtâ@É▌ÆΦ
  198.     EIN_rsmBufSet( work, buf, 1023 );
  199.     // üªâèâWâàü[âÇÅεò±ô╟é▌ì₧é▌
  200.     size = EIN_rsmLoad( work );
  201.     #ifdef DEBUG
  202.     printf(" resume size(%d)\n",size);
  203.     #endif
  204.     if ( size > 0 ){
  205.         // ICONò\Īê╩Æu
  206.         if ( ((ptr = strstr(buf,"\nICON: ")) != NULL ) &&
  207.              (sscanf(ptr,"\nICON: %d %d  INTERVAL: %d\n", &x, &y, &z) > 2 ) ){
  208.             // ÿgì└òWé≡ô╛éΘ
  209.             MMI_SendMessage( ID_ICON[0], MM_GETHYPER, 1, &hyp );
  210.             RSM_ICONFR.lupx = x;
  211.             RSM_ICONFR.lupy = y;
  212.             RSM_ICONFR.rdwx = x+(hyp.fr.rdwx-hyp.fr.lupx);
  213.             RSM_ICONFR.rdwy = y+(hyp.fr.rdwy-hyp.fr.lupy);
  214.             #ifdef DEBUG
  215.             printf("ICON: move to (%d,%d)\n", x, y);
  216.             #endif
  217.             if ( x<-31 ){
  218.                 x=0;
  219.             }
  220.             if ( y<-31 ){
  221.                 y=0;
  222.             }
  223.             MMI_SendMessage( ID_ICON[0], MM_MOVE, 1, &RSM_ICONFR );
  224.             // îvæ¬è╘èué≡É▌ÆΦ
  225.             if ( z>0 && z<601 ){
  226.                 loadInt = z * (1000/20);    // /òbü¿/20msò╧è╖
  227.                 RSM_INT = loadInt;
  228.             }
  229.         }
  230.     } else {
  231.         #ifdef DEBUG
  232.         printf("Can't find resume file.\n");
  233.         #endif
  234.     }
  235.  
  236.     //    öwîié≡ò\Ī
  237.     MMI_SendMessage( MMI_GetBaseObj(), MM_SHOW, 0 ) ;
  238.  
  239.     return NOERR ;
  240. }
  241.  
  242. /*===================================================================*/
  243. /* âèâWâàü[âÇÅεò±ìXÉV (üªé¬é┬éóé╜Åêù¥é═òKé╕ìsé┴é─ë║é│éó)             */
  244. /*===================================================================*/
  245. void    SaveResumeFile()
  246. {
  247.     char    work[RSMWORKSIZE];
  248.     char    buf[1024];
  249.     char    aplpath[128];
  250.     HYPER    hyp1;
  251.     register int ret;
  252.     
  253.     // ÿgì└òWé≡ô╛éΘ
  254.     MMI_SendMessage( ID_ICON[0], MM_GETHYPER, 1, &hyp1 );
  255.     
  256.     // ê┌ô«é╡é─éóé╜éτâZü[âu
  257.     if ( (RSM_INT          != loadInt     ) ||
  258.          (RSM_ICONFR.lupx  != hyp1.fr.lupx) ||
  259.          (RSM_ICONFR.lupy  != hyp1.fr.lupy) ){
  260.         // üªâ}âlü[âWââÅëè·ë╗
  261.         EIN_rsmInit( work, RSMID );
  262.         // üªâoâbâtâ@É▌ÆΦ(âAâvâèÄ»ò╩ID,ìXÉVÄ₧ìÅé═Ä⌐ô«É▌ÆΦé│éΩé▄é╖)
  263.         EIN_rsmBufSet( work, buf, 1023 );
  264.         // üªâAâvâèâfâBâîâNâgâèò█æ╢
  265.         MMI_CallMessage( MMI_GetApliId(), GM_QUERYID, QM_PATH, (int)aplpath );
  266.         EIN_rsmBufPrintf( work, "APLPATH: %s", aplpath );
  267.         // üªâAâvâèû╝ò█æ╢
  268.         EIN_rsmBufPrintf( work, "TITLE:   %s", RSMTITLE );
  269.         // üªâRâüâôâgò█æ╢
  270.         EIN_rsmBufCat( work, "COMMENT: âVâFâïâ^âXâNé╠òëë╫ò\Īé┼é╖üB");
  271.         // âAâCâRâôê╩Æué╞îvæ¬è╘èuò█æ╢
  272.         EIN_rsmBufPrintf( work, "ICON: %d %d  INTERVAL: %d", hyp1.fr.lupx, hyp1.fr.lupy, loadInt/(1000/20) );
  273.         // üªâoâbâtâ@ÅIÆ[(^A)É▌ÆΦ
  274.         EIN_rsmBufTail( work );
  275.         // üªâoâbâtâ@é≡âZü[âu
  276.         ret = EIN_rsmSave( work );
  277.         #ifdef DEBUG
  278.         printf(" resume save size(%d)   ptr:(%d,%d)\n",ret, hyp.fr.lupx, hyp.fr.lupy);
  279.         #endif
  280.         RSM_ICONFR.lupx = hy